//package com.addzero.web.ui.system.tree
//
//import androidx.compose.runtime.Composable
//import androidx.compose.runtime.remember
//import com.addzero.web.ui.hooks.tree.NodeTypes
//import com.addzero.web.ui.hooks.tree.TreeNavigation
//import com.addzero.web.ui.hooks.tree.TreeNode
//import com.addzero.web.ui.hooks.tree.UseListTree
//import com.addzero.web.ui.system.dynamicroute.RouteMetadata
//
///**
// * 通用树形侧边栏组件
// * @param T 树节点数据类型
// * @param data 树形数据列表
// * @param currentId 当前选中节点ID
// * @param onNodeSelected 节点选中回调
// * @param getLabel 获取节点标签的函数
// * @param getChildren 获取子节点的函数
// * @param content 自定义节点内容渲染函数
// */
//@Composable
//fun <T> TreeSider(
//    data: List<T>,
//    currentId: String,
//    onNodeSelected: (String) -> Unit,
//    getLabel: (T) -> String,
//    getChildren: (T) -> List<T>,
//    content: @Composable (T, Boolean, Boolean) -> Unit,
//) {
//    UseListTree<RouteMetadata>(data, getIdFun = { it.routerPath }, itemContent = {})
//    // 将数据转换为树节点
//    val treeNodes = convertToTreeNodes(data, getLabel, getChildren)
//
//    // 初始展开的节点ID集合
//    val initialExpandedIds = remember {
//        // 获取所有节点的ID，确保所有节点都能展开
//        data.flatMap { node ->
//            // 包含当前节点的ID和所有父级节点的ID
//            val ids = mutableSetOf(getLabel(node))
//            // 如果有父级，也添加父级的ID
//            var parent = node
//            while (getChildren(parent).isNotEmpty()) {
//                ids.add(getLabel(parent))
//                parent = getChildren(parent).first()
//            }
//            ids
//        }.toSet()
//    }
//
//    // 使用TreeNavigation组件渲染树形菜单
//    TreeNavigation(
//        nodes = treeNodes,
//        currentSelectedId = currentId,
//        initialExpandedIds = initialExpandedIds,
//        onNodeSelected = onNodeSelected,
//        customNodeContent = { node, isSelected, isExpanded ->
//            content(node.data as T, isSelected, isExpanded)
//        }
//    )
//}
//
//// 将数据转换为TreeNode
//private fun <T> convertToTreeNodes(
//    data: List<T>,
//    getLabel: (T) -> String,
//    getChildren: (T) -> List<T>,
//): List<TreeNode<T>> {
//    return data.map { item ->
//        TreeNode(
//            id = getLabel(item),
//            label = getLabel(item),
//            data = item,
//            type =  NodeTypes.FILE,
//            children = convertToTreeNodes(getChildren(item), getLabel, getChildren)
//        )
//    }
//}
